package cube.data;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * 队列的链表实现
 * 
 * @author abiao
 */
public class FiFo<E> {

	/**
	 * 链表
	 */
	protected LinkedList<E> link = new LinkedList<E>();

	/**
	 * FiFo长度,-1时为不做限制
	 */
	private int size = -1;

	/**
	 * 无限长度FiFo
	 */
	public FiFo() {
	}

	/**
	 * 长度为size的FiFo
	 */
	public FiFo(int size) {
		this.size = size;
	}

	/**
	 * 元素加入FiFo
	 */
	public void put(E e) {
		link.addLast(e);
		if (size > 0 && link.size() > size) {
			link.removeFirst();
		}
	}

	/**
	 * 元素移出FiFo
	 */
	public E top() {
		return empty() ? null : link.removeFirst();
	}

	/**
	 * FiFo长度
	 */
	public int size() {
		return link.size();
	}

	/**
	 * 清空
	 */
	public void clear() {
		link.clear();
	}

	/**
	 * 检查FiFo是否为空
	 */
	public boolean empty() {
		return link.isEmpty();
	}

	/**
	 * 获取此FiFo的只读视图
	 */
	public List<E> getList() {
		return Collections.unmodifiableList(link);
	}
}
